﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.Specialized;

namespace SmsApi
{
    public class SmsResponse
    {
        // OK lub ERROR
        private string status;

        public string Status
        {
            get { return status; }
            set { status = value; }
        }

        /// <summary>
        /// numer ID wysłanego SMS-a. Numer należy zachować w celu sprawdzenia statusu wiadomości
        /// </summary>
        private string id;

        public string Id
        {
            get { return id; }
            set { id = value; }
        }

        /// <summary>
        /// ilość pobranych punktów (np. sms wysłany w 2 wiadomościach zwróci wartość 2 x (stawka za SMS) ).
        /// </summary>
        private string points;

        public string Points
        {
            get { return points; }
            set { points = value; }
        }

        /// <summary>
        /// numer telefonu odbiorcy
        /// </summary>
        private string phone;

        public string Phone
        {
            get { return phone; }
            set { phone = value; }
        }

        /// <summary>
        /// Kod błędu
        /// </summary>
        private string err;

        public string Err
        {
            get { return err; }
            set { err = value; }
        }

        /// <summary>
        /// Wiadomość wysłana
        /// </summary>
        private string message;

        public string Message
        {
            get { return message; }
            set { message = value; }
        }

        /// <summary>
        /// Długość wiadomości
        /// </summary>
        private string length;

        public string Length
        {
            get { return length; }
            set { length = value; }
        }

        /// <summary>
        /// Sms count
        /// </summary>
        private string smscount;

        public string Smscount
        {
            get { return smscount; }
            set { smscount = value; }
        }

        /// <summary>
        /// Parts
        /// </summary>
        private string parts;

        public string Parts
        {
            get { return parts; }
            set { parts = value; }
        }

        /// <summary>
        /// ilość punktów dostępnych dla tego użytkownika w serwisie SMSAPI
        /// </summary>
        private string pkt;

        public string Pkt
        {
            get { return pkt; }
            set { pkt = value; }
        }

        /// <summary>
        /// ilość wiadomości Pro w serwisie SMSAP
        /// </summary>
        private string pro;

        public string Pro
        {
            get { return pro; }
            set { pro = value; }
        }

        /// <summary>
        /// ilość wiadomości Eco w serwisie SMSAP
        /// </summary>
        private string eco;

        public string Eco
        {
            get { return eco; }
            set { eco = value; }
        }


        public SmsResponse()
        {
            this.id = "";
            this.points = "";
            this.phone = "";
            this.err = "";
            this.status = "";
            this.message = "";
            this.length = "";
            this.smscount = "";
            this.parts = "";
            this.pkt = "";
            this.pro = "";
            this.eco = "";
        }

        public static string errorDescription(string err){

            switch (err)
            {
                case "8": return "Błąd w odwołaniu (Prosimy zgłośić)";
                    break;
                case "11": return "Zbyt długa lub brak wiadomości \nlub ustawiono parametr nounicode i pojawiły się znaki specjalne w wiadomości";
                    break;
                case "12": return "Wiadomość zawiera ponad 160 znaków (gdy użyty parametr &single=1)";
                    break;
                case "13": return "Nieprawidłowy numer odbiorcy";
                    break;
                case "14": return "Nieprawidłowe pole nadawcy";
                    break;
                case "17": return "Nie można wysłać FLASH ze znakami specjalnymi";
                    break;
                case "18": return "Nieprawidłowa liczba parametró";
                    break;
                case "19": return "Za dużo wiadomości w jednym odwołani";
                    break;
                case "20": return "Nieprawidłowa liczba parametrów ID";
                    break;
                case "21": return "Wiadomość MMS ma za duży rozmiar (maksymalnie 100kB";
                    break;
                case "22": return "Błędny format SMI";
                    break;
                case "23": return "Błąd pobierania pliku dla wiadomości MMS lub VM";
                    break;                
                case "24": return "Błędny format pobieranego plik";
                    break;
                case "30": return "Brak parametru UDH jak podany jest datacoding=bin";
                    break;
                case "31": return "Błąd konwersji TTS";
                    break;
                case "32": return " Nie można wysyłać wiadomości Eco, MMS i VMS na zagraniczne numery";
                    break;
                case "33": return "Brak polskich numerów przy wysyłce wiadomości EC";
                    break;
                case "40": return "Brak grupy o podanej nazwi";
                    break;
                case "41": return "Wybrana grupa jest pusta (brak kontaktów w grupie";
                    break;
                case "50": return " Nie można zaplanować wysyłki na więcej niż 3 miesiące w przyszłoś";
                    break;
                case "101": return "Niepoprawne lub brak danych autoryzacj";
                    break;
                case "102": return "Nieprawidłowy login lub hasło";
                    break;
                case "103": return "Brak punków dla tego użytkownik";
                    break;
                case "104": return "Brak szablon";
                    break;
                case "105": return "Błędny adres IP (włączony filtr IP dla interfejsu API)";
                    break;
                case "200": return "Nieudana próba wysłania wiadomości, prosimy ponowić odwołani";
                    break;
                case "201": return "Wewnętrzny błąd systemu (prosimy zgłosić";
                    break;
                case "202": return "Zbyt duża ilość jednoczesnych odwołań do serwisu, wiadomość nie została wysłana (prosimy odwołać się ponownie";
                    break;
                case "300": return "Nieprawidłowa wartość pola points (przy użyciu pola points jest wymagana wartość 1";
                    break;
                case "301": return "ID wiadomości nie istniej";
                    break;
                case "400": return "Nieprawidłowy ID statusu wiadomośc";
                    break;
                case "999": return "Wewnętrzny błąd systemu (prosimy zgłosić";
                    break;
                default : return "";
                    break;
                

                    
            }

            
        }

        public override string ToString()
        {
            if (!status.Equals("ERROR"))
            {
                if (message.Equals("") && length.Equals("") && smscount.Equals("") && parts.Equals(""))
                {
                    if (phone.Equals(""))
                    {
                        return String.Format("Status:{0}   ID:{1}  Points:{2}", status, id, points);
                    }
                    else
                        return String.Format("Status:{0}   ID:{1}  Phone:{2}   Points:{3}", status, id, phone, points);
                }
                else
                {
                    return String.Format("Status:{0}   ID:{1}  Phone:{2}   Points:{3}", status, id, phone, points);
                }                
                    
            }
            else
                return String.Format("Status:{0} Err:{1}", status, err);
        }
    }
}
